﻿using System.Collections.Generic;
using Mono.Cecil;
using OpenReflect.Domain.Contracts.Declarations;
using OpenReflect.Domain.Contracts.Generics;
using OpenReflect.Domain.Model.Declarations;

namespace OpenReflect.Services.Builders
{
	public interface IClassDeclarationBuilder:ITypeDeclarationBuilder<IClassDeclaration>
	{

	}

	public class ClassDeclarationBuilder : IClassDeclarationBuilder
	{

		#region ITypeDeclarationBuilder<IClassDeclaration> Members

		public IClassDeclaration CreateTypeDeclaration(TypeDefinition definition)
		{
			ClassDeclaration cd=new ClassDeclaration();
			cd.Name = definition.Name;
			cd.IsStatic = false;
			cd.IsAbstract = false;//TODO: Introduce enum for all practical purposes
			var list = new List<IGenericArgument>();//TODO: Introduce GenericConstraintBuilder thing
			return cd;
		}

		#endregion

		#region ITypeDeclarationBuilder Members

		ITypeDeclaration ITypeDeclarationBuilder.CreateTypeDeclaration(TypeDefinition definition)
		{
			return this.CreateTypeDeclaration(definition);
		}

		#endregion
	}
}